<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>데이터베이스 커넥션 풀</title>
</head>
<body>
<h1>데이터베이스 커넥션 풀</h1>

<h3>개요</h3>
<p>자바 프로그램 실행시 비용이 많이 소모되는 부분은 객체 생성/소멸, 입출력 처리 작업임</p>
<p>JDBC 프로그램에서는 DB 관련 작업시 연결객체를 생성하고, 소멸하는 작업이 빈번하게 일어나는데,<br />
	이 때 접속자가 많으면 실행시간이 많이 지연됨</p>
<p>따라서 연결객체를 만들고, 사용한 후 바로 객체를 소멸시키지 않고 이 객체들을 저장하는 저장소 pool에 일시적으로 보관했다가,<br />
	다른 접속자가 사용해야 할 경우 다시 생성하지 않고 기존에 생성해둔 객체를 재사용</p>
<p>일정시간동안 더 이상 사용하는 사람이 없으면 그때서야 객체를 소멸시킴</p>

<h3>설치 방식</h3>
<p>1. 아파치 프로젝트의 DBCP 라이브러리 이용<br />성능은 좋지만, 설치가 번거로움</p>
<p>2. JSP/서블릿 컨테이너에 내장된 DBCP를 이용<br />다양한 설치방법 제공, 성능은 무난(추천)</p>
<h3>설치 순서</h3>
<p>1. META-INF/server.xml의 context 태그 속 resource 태그에 작성하거나</p>
<p>2. 프로젝트마다 server.xml의  context 태그 속 resource 태그에 작성(다소 불편)</p>
<p>cafe24같은 웹 호스팅 업체를 이용하는 경우 2번 방식을 이용해서 커넥션 풀을 사용해야 함</p>
<p>2번 방식은 tomcat.apache.org의 How-TO 참조</p>
<pre>
	(conf/server.xml의 context 태그 안에 작성)
	&lt;Resource name="jdbc/zipcode" auth="Container" type="javax.sql.DataSource"
			maxActive="100" maxIdle="30" maxWait="10000"
			username="zipcode" password="zipcode" driverClassName="com.mysql.jdbc.Driver"
			url="jdbc:mysql://112.216.253.125:3306/zipcode"/>
	(WEB-INF/web.xml에 작성)
	&lt;resource-ref>
		&lt;description>DBCP config&lt;/description>
		&lt;res-ref-name>jdbc/zipcode&lt;/res-ref-name>
		&lt;res-type>javax.sql.DataSource&lt;/res-type>
		&lt;res-auth>Container&lt;/res-auth>
	&lt;/resource-ref>
</pre>

<h3>JNDI 표기법</h3>
<p>java naming and directory interface</p>

<hr />
<sql:query var="rs" dataSource="jdbc/zipcode">
	select * from zipcode order by seq desc limit 0, 100
</sql:query>
<c:forEach var="z" items="${ rs.rows }">
	<span>${ z.zipcode }&nbsp;&nbsp;</span>
</c:forEach>

</body>
</html>